package com.app.bimo.module_accounts.mvp.model.api.service;


import com.app.bimo.commonbusiness.bean.BaseResult;
import com.app.bimo.library_db.ADConfigResultData;
import com.app.bimo.library_db.UserData;
import com.app.bimo.module_accounts.mvp.model.entiy.CodeHelpData;
import com.app.bimo.module_accounts.mvp.model.entiy.OtherResult;
import com.app.bimo.module_accounts.mvp.model.entiy.PreferenceData;
import com.app.bimo.module_accounts.mvp.model.entiy.TagData;
import com.app.bimo.module_accounts.mvp.model.entiy.TagResult;

import java.util.List;

import androidx.collection.ArrayMap;
import io.reactivex.Observable;
import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Query;

public interface AccountService {
//    /**
//     * 账号登录
//     *
//     * @param account
//     * @param password
//     * @param code
//     * @return
//     */
//    @FormUrlEncoded
//    @POST("account/login")
//    Observable<BaseResult<String>> login(@Field("account") String account, @Field("password") String password, @Field("code") String code);

    /**
     * 幽灵账户登录
     *
     * @param type
     * @param openid
     * @param fromChannel 第三方登录  手机登录
     * @return
     */
    @FormUrlEncoded
    @POST("account/login")
    Observable<BaseResult<OtherResult>> login(@FieldMap ArrayMap<String, String> map);

//    /**
//     * 第三方登录
//     *
//     * @param type     登录类型, 1weibo，2 qq，3 wechat
//     * @param openid
//     * @param unionid  第三方登录unionid，没有unionid的登录传openid的值（比如微博）
//     * @param nickname
//     * @param avatar
//     * @param sex      性别,1男 2女 3未知
//     * @return
//     */
//    @FormUrlEncoded
//    @POST("account/login")
//    Observable<BaseResult<OtherResult>> login(@Field("type") int type, @Field("openid") String openid, @Field("unionid") String unionid, @Field("nickname") String nickname, @Field("avatar") String avatar, @Field("sex") int sex);

    @GET("code")
    Observable<BaseResult<Object>> getCode(@Query("mobile") String account, @Query("type") int type);

    @FormUrlEncoded
    @POST("account/mobile")
    Observable<BaseResult<OtherResult>> phoneRegister(@FieldMap ArrayMap<String, String> map);


    @GET("account/like")
    Observable<BaseResult<List<PreferenceData>>> getPre(@Query("channel") int channel);

    @FormUrlEncoded
    @POST("account/like")
    Observable<BaseResult<Object>> setPre(@Field("channel") int channel, @Field("categoryids") String categoryids, @Field("isRegiest") int isRegiest);

    @GET("account/info")
    Observable<BaseResult<UserData>> getUserInfo();

    /**
     * @return
     */
    @GET("client/version")
    Observable<BaseResult<UserData>> checkUpData();

    @GET("code/tips")
    Observable<BaseResult<CodeHelpData>> getCodeHelp();

    @GET("client/config/ad")
    Observable<BaseResult<ADConfigResultData>> getConfig();

    /**
     * 个人中心 偏好设置获取标签
     *
     * @return
     */
    @GET("novel/tag")
    Observable<BaseResult<TagResult>> getTags(@Query("page") int page, @Query("pagesize") int pagesize, @Query("tagName") String tagName);

    @GET("novel/tag")
    Observable<BaseResult<TagResult>> getTags(@Query("page") int page, @Query("pagesize") int pagesize);

    @GET("account/tags")
    Observable<BaseResult<List<TagData>>> getUsedTags();

    @FormUrlEncoded
    @POST("account/like/tag")
    Observable<BaseResult<String>> setTags(@Field("tagids") String tagids);

    @PUT("account/pushcid")
    Observable<BaseResult<String>> putCid(@Query("pushCid") String pushCid);

    @GET()
    Observable<BaseResult<String>> getmBaseUrl();

}